package auth.service;

import entites.Domaine;
import entites.Parcours;
import entites.Personne;
import entites.UniteEnseignement;

import java.util.*;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import service.IService;

import business.personne.IPersonneManager;
import business.personne.PersonneManager;


public class User extends Personne implements IUser
{
	private	String login;
	private int auth=0;
    private IPersonneManager pm;
	public User(){}

	public User(String login) 
	{
		super();
		this.login = login;		
	}

	public String getLogin() 
	{
		return login;
	}

	public void setLogin(String login) 
	{
		this.login = login;
	}

	public int getAuth() 
	{
		return auth;
	}

	public void setAuth(int auth) 
	{
		this.auth = auth;
	}


	/* (non-Javadoc)
	 * @see auth.service.IUser#isInCharge(auth.service.User, java.lang.Object)
	 */
	public boolean isInCharge(User user, Object objectToTest)
	{ 
		boolean inCharge = false;
		String code=user.getCode();
		//ApplicationContext ctx = new ClassPathXmlApplicationContext("spring-config.xml");
		//pm = (IPersonneManager) ctx.getBean("personneManager");

		
		Personne p=pm.selectPersonneByCode(code);
		System.out.println(code+"           cccccccccccccccccccccccccccccccccccccccccccccccccc");

		List<Domaine> userDomaines = pm.FindDomainesByResponsable(p) ;
		List<Parcours> userParcours = pm.FindParcoursByResponsable(p);
		List<UniteEnseignement>userUe = pm.FindUeByResponsable(p);
	
		// Test les domaines de l'utilisateur.
		if((userDomaines != null) && objectToTest instanceof Domaine)
		{
			Domaine  domaineToTest = (Domaine)objectToTest;
			
			for(Domaine userDomaine:userDomaines)	
			{
				if(userDomaine.getId().compareTo(domaineToTest.getId()) == 0)
					inCharge = true;
			}	
		}
	
		// Test les parcours de l'utilisateur.
		if((userParcours != null) && objectToTest instanceof Parcours )
		{
			Parcours parcoursToTest =(Parcours)objectToTest;
			for(Parcours parcours:userParcours)
	
			{
				if(parcours.getAcronyme().equals(parcoursToTest.getAcronyme()))
					inCharge=true;
			}	
		}
		
		// Test les unites d'enseignement de l'utilisateur.
		if((userUe != null) &&  objectToTest instanceof UniteEnseignement)
		{
			UniteEnseignement userUeToTest =(UniteEnseignement)objectToTest;
			for(UniteEnseignement uens:userUe)
	
			{
				if(uens.getCode().equals(userUeToTest.getCode()))
					inCharge=true;
			}
		}
	
		return inCharge;
	}

	public IPersonneManager getPm() {
		return pm;
	}

	public void setPm(IPersonneManager pm) {
		this.pm = pm;
	}
}
